/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO.Firebird;

import DAO.DAOInstanciaJogo;
import InstanciaJogo.InstanciaJogoSwing;
import java.sql.CallableStatement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.Types;
import java.util.ArrayList;

/**
 * DAOInstanciaJogoFirebird

 Versao 1.0

 Data Criação 18/11/2013
 *
 * @author Igor
 */
public class DAOInstanciaJogoFirebird extends DAOConexaoFirebird implements DAOInstanciaJogo {
    //Outros metodos
    /**
     * Busca uma instancia do Jogo, respeitando o idJogo passado como parametro
     * @param idJogo
     * @return 
     */
    public InstanciaJogoSwing buscaInstanciaJogo(long idJogo) throws Exception {
        ResultSet result = null;
        InstanciaJogoSwing jogo = null;

            result = this.select.executeQuery("select\n" +
                                            "a.TEMPO_EXP_ROSTO,\n" +
                                            "a.TEMPO_TRANSICAO_IMAGENS,\n" +
                                            "a.REPETIR_APRESENTACAO_IMAGENS,\n" +
                                            "a.MSG_ACERTO_ERRO,\n"+
                                            "a.ID_MODO_JOGO\n"+
                                            "from INSTANCIA_JOGO a\n" +
                                            "where a.ID_JOGO = "+idJogo);

            while (result.next()) {
                jogo = new InstanciaJogoSwing(0);

                jogo.setTempoApresentacaoImagens(result.getInt("TEMPO_EXP_ROSTO"));
                jogo.setTempoTransicaoImagens(result.getInt("TEMPO_TRANSICAO_IMAGENS"));
                jogo.setRepetirApresentacaoImagens(result.getInt("REPETIR_APRESENTACAO_IMAGENS"));
                jogo.setModoJogo(result.getLong("ID_MODO_JOGO"));

                if(result.getInt("MSG_ACERTO_ERRO") == 0){
                    jogo.setApresentaMensagemAcertoErro(false);
                }else{
                    jogo.setApresentaMensagemAcertoErro(true);
                }
            }
        
        return jogo;
    }

    /**
     * Grava a instancia do jogo passada como parametro
     * @param jogo
     * @return 
     */
    public long gravaInstanciaJogo(InstanciaJogoSwing jogo, ArrayList<Integer> percsAvancarSubFase) throws Exception {
        int indiceParametroRetorno = 7;
        long vReturn = -1;
        int msgAcertoErro = 0; //Nao apresenta as mensagens de acerto e erro
        
        //Apresenta as mensagens de acerto e erro
        if(jogo.isApresentaMensagemAcertoErro()){
            msgAcertoErro = 1;
        }

            CallableStatement cs;
            cs = this.con.getCon().prepareCall("call GRAVA_INSTANCIA_JOGO(?,?,?,?,?,?)");

            cs.setLong(1, jogo.getTempoTransicaoImagens());
            cs.setLong(2, jogo.getTempoApresentacaoImagens());       
            cs.setLong(3, jogo.getRepetirApresentacaoImagens());
            cs.setInt(4, msgAcertoErro);
            cs.setLong(5, jogo.getModoJogo());
            cs.registerOutParameter(indiceParametroRetorno, Types.NUMERIC);
            cs.executeQuery();
            
            vReturn = cs.getLong(indiceParametroRetorno);
            this.con.getStm().executeBatch();

        return vReturn;
    }
    
    /**
     * Grava a instancia do jogo passada como parametro
     * @param idJogo
     * @param idPessoa 
     */
    public void gravaJogo(long idPessoa, long idJogo) throws Exception {
            PreparedStatement stmt;
            stmt =  this.con.getCon().prepareStatement("insert into JOGO (ID_PESSOA, ID_INSTANCIA_JOGO)values(?,?)");

            stmt.setLong(1, idPessoa);
            stmt.setLong(2, idJogo); 
            stmt.executeUpdate();  
            stmt.close();  

            this.con.getStm().executeBatch();

    }

    @Override
    public void atualizaTempoInstanciaJogo(long idInstanciaJogo, long tempoJogo) throws Exception {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods, choose Tools | Templates.
    }
}
